package com.yun.blog.utils;

import org.springframework.util.ResourceUtils;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.UUID;

/**
 * title        : FileUtils
 * projectName  : dantouBlog-back
 * description  : 文件工具类
 * author       : simple
 * date         : 2022/11/23下午17:17
 */

public class FileUtils {

    public static final String[] PIC_ALLOW_FILETYPE = new String[]{".png", ".jpg", ".jpeg", ".webp", ".bmp", ".svg", "icon"};

    /**
     * 以文件后缀判断是否允许
     *
     * @param filename 文件名
     * @return boolean 是否允许
     **/
    public static boolean isAllowPic(String filename) {
        for (String s : PIC_ALLOW_FILETYPE) {
            if (filename.toLowerCase().endsWith(s)) {
                return true;
            }
        }
        return false;
    }


    /**
     * 保存图片到指定位置
     *
     * @param file file对象
     * @param path 保存文件夹path
     * @return java.lang.String 返回文件路径用于保存到数据库，是static/ 后面的路径
     **/
    public static String saveImg(MultipartFile file, String path) throws IOException {
        // 获取文件名
        String filename = UUID.randomUUID() + file.getOriginalFilename();
        // 静态文件地址
        String staticPath = ResourceUtils.getURL("classpath:static/").getPath();

        // save路径从static/ 后面开始，以/结尾，到时候加filename一起存到数据库
        String savePath;
        if (path.endsWith("/")) {
            savePath = "img/upload/" + path;
        } else {
            savePath = "img/upload/" + path + "/";
        }
        String uploadDirPath = staticPath + savePath;

        // 创建文件夹保存文件夹
        File uploadDir = new File(uploadDirPath);
        if (!uploadDir.exists()) {
            uploadDir.mkdirs();
        }

        // 得到完整路径并保存进去
        String fullPath = uploadDirPath + filename;
        File savefile = new File(fullPath);

        file.transferTo(savefile);

        // 返回没有/开头的static/ 后面的路径保存到数据库
        return savePath + filename;
    }


}
